home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / sharew / accs / grafstar / listings / printer.lst < prev    next >
Encoding:
File List  |  1989-06-20  |  8.6 KB  |  198 lines

  1. '
  2. ' PRINTER.LST
  3. '
  4. ' Hier haben Sie ein Demo-Druck-Programm. Sie können es sowohl als
  5. ' Accessory oder als Programm starten. Rufen Sie das Programm auf, wird
  6. ' immer das erste der reservierten Bilder auf dem Monitor angezeigt
  7. ' und mit der 'normalen' ST-Hardcopy-Routine ausgedruckt.
  8. ' In der Procedure 'Printer' können Sie Ihre eigenen Druck-Routinen
  9. ' einbauen.
  10. ' An dieser Stelle wünsche Ich Ihnen viel Spaß und Erfolg beim Erstellen
  11. ' Ihrer eigenen Druckeranpassungen,
  12. '
  13. '                                       Ihr Alexander Stork
  14. '                                                   (Autor)
  15. '
  16. '
  17. If @Menu_acc                                    !Als ACC geladen?
  18.   Reserve 5000                                  !Speicher reservieren
  19.   @Menu_register(@Menu_ap.id,"  Hardcopy #1")   !ACC eintragen
  20. Endif
  21. '
  22. Repeat
  23.   If @Menu_acc                                  !ACC?
  24.     Repeat                                      !Dann auf Message ...
  25.       @Evnt_mesag                               !warten.
  26.     Until @Evnt_mesag(0)=40                     !Verlasse bei '40'
  27.   Endif
  28.   '
  29.   @Memo_getadr(*Adresse%,*Anzahl%,*Ext%)        !Bildadresse etc. ermitteln
  30.   '
  31.   If Adresse%>0                                 !Schon Bilder angemeldet?
  32.     Get 0,0,639,18,Menu$                        !Menüleiste 'merken'
  33.     Bmove Adresse%,Xbios(3),32000               !Bild #1 anzeigen
  34.     '
  35.     Alert 2,"Hardcopy von diesem|Bild?",1,"   JA   |NEIN",Erg%  !Alert
  36.     '
  37.     If Erg%=1                                   !'JA'
  38.       @Printer                                  !Druckroutine aufrufen
  39.     Endif
  40.     @Redraw                                     !Redraw-Message abschicken
  41.   Else
  42.     Alert 1,"Es sind momentan keine|Bilder im Speicher!",1,"   OK   ",Erg%
  43.   Endif
  44. Until @Menu_acc=0                               !Kein ACC -> zum Desktop
  45. '
  46. Procedure Printer
  47.   ' In diese Procedure können Sie eigene Druck-Routinen einbauen. Im
  48.   ' Grunde genommen brauchen Sie dabei nur den Bildspeicher (Xbios(3))
  49.   ' auszulesen und an Ihren Drucker zu senden, da das Bild bereits auf
  50.   ' dem Bildschirm angezeigt wird.
  51.   ' Hier habe ich rein provisorisch den 'Hardcopy'-Befehl eingesetzt,
  52.   ' ersetzen Sie ihn ggf. durch eigene Druck-Routinen.
  53.   '
  54.   Hidem                                         !Maus 'verstecken'
  55.   Hardcopy                                      !Hardcopy
  56.   Showm                                         !Maus wieder zeigen
  57. Return
  58. Procedure Redraw
  59.   Deffill 1,2,4                                 !Graues Muster voreinstellen
  60.   Graphmode 1                                   !Grafikmodus 'deckend'
  61.   Pbox 0,0,639,399                              !gefüllte Box zeichnen
  62.   '
  63.   Put 0,0,Menu$                                 !Menübalken setzen
  64.   '
  65.   Dpoke Gintin,3
  66.   Dpoke Gintin+2,0
  67.   Dpoke Gintin+4,0
  68.   Dpoke Gintin+6,640
  69.   Dpoke Gintin+8,400
  70.   Dpoke Gintin+10,0
  71.   Dpoke Gintin+12,0
  72.   Dpoke Gintin+14,640
  73.   Dpoke Gintin+16,400
  74.   Gemsys 51                                     !Redraw-Messages abschicken
  75. Return
  76. '
  77. ' =============================================================================
  78. '                                 M E M O R Y                          12.05.89
  79. ' =============================================================================
  80. '
  81. ' Wollen Sie mit eigenen Programmen an die reservierten Bilder herankommen,
  82. ' können Sie dies mit folgenden Routinen ganz einfach tun.
  83. ' Diese Routinen wurden in GFABASIC 2.0 geschrieben, sollten aber in der
  84. ' Version 3.0 ebenfalls laufen.
  85. '
  86. ' Hier werden zunächst die einzelnen Routinen kurz dargestellt. Anschließend
  87. ' folgt dann deren Programmtext.
  88. '
  89. ' Bsp.1: @Memo_getadr(*Adresse%,*Anzahl%,*Ext%)
  90. '        Man erhält die Startadresse und die Anzahl der Bilder sowie
  91. '        eine Zusatzinformation (Integer, 2 Byte).
  92. '
  93. ' Bsp.2: @Memo_putadr(Adresse%,5,0)
  94. '        Falls Bilder reserviert wurden, können diese hier angemeldet werden.
  95. '        In diesem Fall befinden sich 5 Bilder ab Adresse 'Adresse%'.
  96. '        Als Zusatzinformation wird eine '0' übergeben.
  97. '
  98. ' Bsp.3: @Memo_putadr(Adresse%,12,-1)
  99. '        Es werden neue Werte für Adresse und Anzahl der Bilder gesetzt.
  100. '        Die Zusatzinfo bleibt unverändert. Wenn negative Werte übergeben
  101. '        werden, bleibt der jeweilige Parameter unverändert.
  102. '
  103. ' Bsp.4: @Memo_clradr
  104. '        So werden die Informationen des Infospeichers gelöscht, d.h. es
  105. '        werden die ersten zwei Bytes der Kennung gelöscht, so daß die
  106. '        restlichen Informationen von der Procedure Memo_getadr() nicht
  107. '        mehr erkannt werden.
  108. '
  109. ' So sieht das Format des 16 Byte langen Informationsspeichers aus. Er liegt
  110. ' hinter dem (phys.) Bildspeicher, also ab Xbios(2)+32000.
  111. '
  112. ' PICTUREvaaaannee = 16Bytes
  113. ' |      ||   | |
  114. ' |      ||   | erweiterte Information (z.Zt.=0): Wort/14
  115. ' |      ||   Anzahl der Bilder: Wort/12
  116. ' |      |Adresse des 1. Bildes: Langwort/8
  117. ' |      Format-Version (=0): Byte/7
  118. ' Kennung: 7 Byte String/0
  119. '
  120. ' Hier sind die Routinen zur Abfrage des Speichers:
  121. '
  122. Procedure Memo_getadr(Aptr.%,Nptr.%,Eptr.%)
  123.   Local Adresse.%,Info$,Adr.%,Num.%,Ext.%       !Lokale Variablen
  124.   '
  125.   Info$=Space$(7)                               !7-Byte-String vorbereiten
  126.   Adresse.%=Xbios(2)+32000                      !Adresse ermitteln
  127.   Bmove Adresse.%,Varptr(Info$),7               !Kennung in String kopieren
  128.   '
  129.   If Info$="PICTURE" And Peek(Adresse.%+7)=0    !Kennung und Version abfragen
  130.     Adr.%=Lpeek(Adresse.%+8)                    !Bildadresse ...
  131.     Num.%=Dpeek(Adresse.%+12)                   !Anzahl der Bilder ...
  132.     Ext.%=Dpeek(Adresse.%+14)                   !und Zusatzinformationen holen
  133.     '                                           !(-> ist zur Zeit unbenutzt)
  134.   Else
  135.     Adr.%=-1                                    !Bei falscher Kennung ...
  136.     Num.%=-1                                    !wird jeder Variable ...
  137.     Ext.%=-1                                    !'-1' übergeben
  138.     '
  139.   Endif
  140.   '
  141.   *Aptr.%=Adr.%                                 !Und nun alle ...
  142.   *Nptr.%=Num.%                                 !Werte über die Pointer ...
  143.   *Eptr.%=Ext.%                                 !zurückgeben
  144. Return
  145. Procedure Memo_putadr(Adr%,Num%,Ext%)
  146.   Local Adresse%,Kennung$                       !Lokale Variablen
  147.   '
  148.   Kennung$="PICTURE"                            !Kennungs-String definieren
  149.   Adresse%=Xbios(2)+32000                       !Adresse ermitteln
  150.   '
  151.   Bmove Varptr(Kennung$),Adresse%,7             !Kennung übertragen
  152.   '
  153.   If Adr%>=0
  154.     Lpoke Adresse%+8,Adr%                       !Adresse, ...
  155.   Endif
  156.   If Num%>=0
  157.     Dpoke Adresse%+12,Num%                      !Anzahl und ...
  158.   Endif
  159.   If Ext%>=0
  160.     Dpoke Adresse%+14,Ext%                      !Zusatzinfo setzen
  161.   Endif
  162. Return
  163. Procedure Memo_clradr
  164.   Local Adresse%                                !Lokale Variable
  165.   '
  166.   Adresse%=Xbios(2)+32000                       !Adresse ermitteln
  167.   '
  168.   Dpoke Adresse%,0                              !Kennung löschen
  169. Return
  170. ' =============================================================================
  171. '                                   M E N Ü                            12.05.89
  172. ' =============================================================================
  173. Deffn Menu_acc=(Lpeek(Basepage+&H24)=0)         !Ist '-1' wenn als ACC geladen
  174. Deffn Menu_ap.id=Dpeek(Lpeek(Gb+4)+4)           !Applikations-ID
  175. Procedure Menu_register(Ap.id%,Nam$)            !Appl.-ID und ACC-Name übergeben
  176.   Nam$=Nam$+Chr$(0)                             !Nullbyte anhängen
  177.   Bmove Varptr(Nam$),Basepage+192,Len(Nam$)     !String auf freien Speicher
  178.   '                                             !der Basepage schieben
  179.   '
  180.   Dpoke Gintin,Ap.id%                           !Appl.-ID übergeben
  181.   Lpoke Addrin,Basepage+192                     !String-Adresse übergeben
  182.   '
  183.   Gemsys 35                                     !AES-Routine ausführen
  184. Return
  185. ' =============================================================================
  186. '                                  E V E N T                           12.05.89
  187. ' =============================================================================
  188. Deffn Evnt_mesag(N%)=Dpeek(Evnt_buffer%+N%*2)   !Liest Event-Message-Buffer
  189. Procedure Evnt_mesag                            !Wartet auf ein "Event"
  190.   Erase Evnt_buffer%()                          !Eventbuffer ...
  191.   Dim Evnt_buffer%(3)                           !initialisieren (16 Bytes)
  192.   '
  193.   Evnt_buffer%=Varptr(Evnt_buffer%(0))          !Buffer-Adresse ermitteln ...
  194.   Lpoke Addrin,Evnt_buffer%                     !und an das AES übergeben
  195.   '
  196.   Gemsys 23                                     !AES-Routine ausführen
  197. Return
  198.